(function(w){
	var doc = w.document;
	var base = {
		init:function(){
			this.init_validate();//初始化验证框架
			this.init_page();//初始化分页的UI点击事件
		},
		getView:function(options){
			$.ajax({
				url:options.url,
				dataType:"text",
				type:"get",
				success:function(result){
					options.success(result);
				}
			})
		},
		getData:function(options){
			$.ajax({
				url:options.url,
				dataType:options.dataType?options.dataType:"json",
				type:"get",
				success:function(result){
					if(result.result == "fail"){
						bootbox.alert("服务异常，请稍后重试！");
					}else{
						if(options.success){
							options.success(result.data);
						}
					}
				},
				fail:function(){
					bootbox.alert("服务异常，请稍后重试！");
				}
			})
		},
		postData:function(options){
			$.ajax({
				url:options.url,
				type:"post",
				data:options.data,
				dataType:options.dataType?options.dataType:"json",
				success:function(result){
					if(result.result == "fail"){
						bootbox.alert("服务异常，请稍后重试！");
					}else{
						if(options.success){
							options.success(result.data);
						}
					}
				},
				fail:function(){
					bootbox.alert("服务异常，请稍后重试！");
				}
			})
		},
		init_page:function(){
			$("select[name=pageSize]").change(function(){
				$(".btn-search").click();
				// $(".btn-search").parentsUntil('form').submit();
			});
			$("a[name=_pageNumber]").click(function(){
				var _pageNumber = $(this).text();
				$("input[name=pageNumber]").val(_pageNumber-1);
				// $(".btn-search").click();
				$(".btn-search").parentsUntil('form').submit();
			});
			$("a[name=previous]").click(function(){
				var pageNumber = $("input[name=pageNumber]").val();
				if(pageNumber>0){
					$("input[name=pageNumber]").val(pageNumber-1);
					// $(".btn-search").click();
					$(".btn-search").parentsUntil('form').submit();
				}
			});
			$("a[name=next]").click(function(){
				var pageNumber = $("input[name=pageNumber]").val();
				var totalPages = $("#totalPages").val();
				if(pageNumber<totalPages-1){
					$("input[name=pageNumber]").val(pageNumber*1+1);
					// $(".btn-search").click();
					$(".btn-search").parentsUntil('form').submit();
				}
			});
			$("#_changePageNumber").blur(function(){
				var totalPages = $("#totalPages").val();
				var _pageNumber = $(this).val();
				
				var rex = /^\d+$/g;
				if (rex.test(_pageNumber)) {
					totalPages = parseInt(totalPages, 10);
					_pageNumber = parseInt(_pageNumber, 10);
					
					if (_pageNumber > 0 && totalPages > 0) {
						if (_pageNumber > totalPages) {
							_pageNumber = totalPages;
						}
						$("input[name=pageNumber]").val(_pageNumber - 1);
						$(".btn-search").parentsUntil('form').submit();
					}
				}
			});
		},
		init_validate:function(){
			$.extend($.validator.messages, {
			    required: "该字段不能为空",
			    remote: "请修正该字段",
			    email: "请输入正确格式的电子邮件",
			    url: "请输入合法的网址",
			    date: "请输入合法的日期",
			    dateISO: "请输入合法的日期 (ISO).",
			    number: "请输入合法的数字",
			    digits: "只能输入整数",
			    creditcard: "请输入合法的信用卡号",
			    equalTo: "请再次输入相同的值",
			    accept: "请上传合法的文件",
			    maxlength: $.validator.format("请输入一个长度最多是 {0} 的字符串"),
			    minlength: $.validator.format("请输入一个长度最少是 {0} 的字符串"),
			    rangelength: $.validator.format("请输入一个长度介于 {0} 和 {1} 之间的字符串"),
			    range: $.validator.format("请输入一个介于 {0} 和 {1} 之间的值"),
			    max: $.validator.format("请输入一个最大为 {0} 的值"),
			    min: $.validator.format("请输入一个最小为 {0} 的值")
			});
			$.validator.setDefaults({
				errorClass:"alert alert-danger autowidth",
				errorElement:"div",
				highlight:false,
				submitHandler:function(form){
					$.LoadingOverlay("show");
					form.submit();
				},
				errorPlacement: function(error, element) {  
					if($(element).hasClass("select2")){
						error.insertAfter($(element).parent().children("span"));
					}else{
						error.insertAfter(element);
					}
			     }      
			})
			$("form").validate();
		},
		cookie:{
			set:function(key,value,expireDays){
				if(!expireDays){
					expireDays = 7 ;
				}
				var date = new Date();
				date.setDate(date.getDate()+expireDays);
				doc.cookie = key+"="+escape(value)+";expires="+date.toGMTString();
			},
			get:function(key){
				var ck = doc.cookie;
				if(ck.length>0){
					var sIndex = ck.indexOf(key+"=");
					if(sIndex>-1){
						sIndex = sIndex+key.length+1;
						var endIndex = ck.indexOf(";",sIndex);
						if(endIndex==-1){
							endIndex = ck.length;
						}
						return unescape(ck.substring(sIndex,endIndex))
					}
				}
			}
		},
		validAndAjaxSubmit($dialogObj, $listFormObj, funUnValid) {
			// console.log('validAndAjaxSubmit开始方法执行');
			if ($dialogObj.valid()) {
				var url = $dialogObj.attr("action");
				var options  = {
					url: url,//同action 
					type : 'post',
					beforeSend:function(xhr){// 请求之前
						$.LoadingOverlay("show");
						// console.log('请求之前');
					},
					success:function(data) {
						// console.log('请求响应数据');
						// console.log(data);
					},
					complete:function(xhr){// 请求完成
						// console.log('请求完成');
						$listFormObj.submit();
					},
					error: function(xhr,status,msg){
						// console.log("状态码"+status+"; "+msg)
						// console.log('玩命加载中..');
					}
				};
				$dialogObj.ajaxSubmit(options);
			} else {
				// console.log('验证不通过...');
				if (funUnValid != null && funUnValid != undefined) {
					try {
						funUnValid();
					} catch(e) {}
				}
			}
		},
		validAndAjaxSubmitJson($dialogObj, funUnValid, funSuccessCallBack) {
			var submitSuccess = true;
			// console.log('validAndAjaxSubmit开始方法执行');
			if ($dialogObj.valid()) {
				var url = $dialogObj.attr("action");
				var options  = {
					url : url,//同action 
					type : 'post',
					dataType : 'json',
					beforeSend : function(xhr) {// 请求之前
						$.LoadingOverlay("show");
						// console.log('请求之前');
					},
					success : function(data) {
						// console.log(data);
						if (data.result != undefined && data.result != null) {
							submitSuccess = data.result == 'success' ? true : false;
						}
						if (!submitSuccess) {
							bootbox.alert(data.data ? data.data :"服务异常，请稍后重试！");
						}
						
						$.LoadingOverlay("hide");
						if (funSuccessCallBack != null && funSuccessCallBack != undefined) {
							funSuccessCallBack(data);
						}
					},
					complete : function(xhr){// 请求完成
						// console.log('请求完成');
					},
					error : function(xhr, status, msg) {
						// console.log("状态码"+status+"; "+msg)
						// console.log('玩命加载中..');
					}
				};
				$dialogObj.ajaxSubmit(options);
			} else {
				// console.log('验证不通过...');
				if (funUnValid != null && funUnValid != undefined) {
					try {
						funUnValid();
					} catch(e) {}
				}
			}
		}
	};
	w.base = base;
	w.base.init();
})(window);


/* -------------------------- 自定义的一些表单验证方法 ----------------------------------- */

/*
** 去了前后空格后，再验证必填
*/
$.validator.addMethod("trimRequired", function(value, element) {
	if (value == '') {
		return false;
	}
	if ($.trim(value) == '') {
		return false;
	}
	return true;
}, "该字段不能为空");

/*
** 输入内容中间不能包含空格
*/
$.validator.addMethod("unContainSpace", function(value, element) {
	if (value == '' || $.trim(value) == '') {
		return true;
	}
	if ($.trim(value).search(/\s/) != -1) {
		return false;
	}
	return true;
}, "该字段不能包含空格");

/*
** 输入内容中间不能包含特殊字符
*/
$.validator.addMethod("unContainEscapeChar", function(value, element) {
	// console.log("unContainEscapeChar  value="+value);
	if (value == '' || $.trim(value) == '') {
		return true;
	}
	
	let patt = new RegExp("[+ /?%#&=]");
	
	return !patt.test($.trim(value));
}, "该字段不能包含特殊字符");


/*
** 选择文件大小的最大限制
*/
$.validator.addMethod("fileMaxSize", function(value, element, param) {
	/*console.log("value="+value);
	console.log("element="+element);
	console.log("param="+param);*/
	
	var f = element.files;
	// console.log("f.length= "+ f.length);
	if (f.length == 0 ) {
		return true;
	}
	
	// 判断文件大小（字节）
	// console.log("size= "+ f[0].size);
	if (f[0].size > eval(param)) {
		return false;
	}
	return true;
}, "选择的文件太大");

/*
** 选择文件类型的限制(覆盖验证框架中的accept验证方法)
** 以后页面上再写的时候，如下： accept=".jpg,.jpeg,.png,.txt,.doc,.docx,.xls,.xlsx" 
*/
$.validator.addMethod( "accept", function( value, element, param ) {
	console.log('accept_new');
	var typeParam = typeof param === "string" ? param.replace( /\s/g, "" ) : "image/*",
		optionalValue = this.optional( element ),
		i, file, regex;
	
	if ( optionalValue ) {
		return optionalValue;
	}

	if ( $( element ).attr( "type" ) === "file" ) {
		var typeArr = typeParam.split(',');
		for (var j = 0; j < typeArr.length; j++) {
			var t = typeArr[j].replace(/\*/g, ".*");

			if ( element.files && element.files.length ) {
				regex = new RegExp( ".?(" + t + ")$", "i" );
				for ( i = 0; i < element.files.length; i++ ) {
					file = element.files[ i ];

					// 判断文件类型
					var fileType = (file.name.substring(file.name.lastIndexOf("."))).toLowerCase();
					if ( fileType.match( regex ) ) {
						return true;
					}
				}
			}
		}
	}

	return false;
}, "请上传合法的文件" );
